<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
  </head>
  <body>
    <script>
      /**
       * 这题方法确实很多，每种类似咱都举例一种昂，
       * 其他各种组合也都是改变些许，就不多说了
       */
      let arr = [
        [0, 1],
        [2, [3, [4, [5, 6]]]],
      ];
      /**
       * 使用递归实现
       * 当遇到非数组时直接放进数组返回，
       * 遇到数组就递归调用自身，并将返回值拼接起来
       */
      const _flatten = (arr) => {
        // 补全代码

        let result = [];

        arr.forEach((element) => {
          if (Array.isArray(element)) result = result.concat(_flatten(element));
          else result.push(element);
        });
        return result;
      };

      console.log(_flatten(arr));

      /**
       * 使用flat()实现（开发首选）
       * 当然在牛客好像不支持，交题别用这个 
       */
      const _flatten1 = (arr) => arr.flat(Infinity);

      console.log(_flatten1(arr));

      /**
       * 扩展运算符实现
       * 用扩展运算符的小友可能会有误区，
       * 直接使用其实只会扩展第一层的数组，
       * 所以需要使用while循环，
       * 每次循环都会将数组中的数组展开再拼接赋值，
       * 直到数组中没有对象为数组为止 
       */
      const _flatten2 = (arr) => {
        let newArr = JSON.parse(JSON.stringify(arr));
        while (newArr.some((item) => Array.isArray(item)))
          newArr = [].concat(...newArr);
        return newArr;
      };
      console.log(_flatten2(arr));

      /**
       * 字符串操作函数实现
       * toString将数组变成"0,1,2"的形式，
       * 分割再组成数组即可
       */
      const _flatten3 = (arr) => arr.toString().split(",").map(Number);

      console.log(_flatten3(arr));

      /**
       * 使用正则表达式替换实现
       * 一开始我们肯定需要转字符串，但用的是JSON.stringify，
       * 将数组变成"[0,1,2]"的形式，
       * 使用将`[`或者`]`正则表达式进行全局替换为空值，
       * 然后再分割再组成数组即可
       */
      const _flatten4 = (arr) =>
        JSON.stringify(arr)
          .replace(/[\[|\]]/g, "")
          .split(",")
          .map(Number);
          console.log( JSON.stringify(arr)
          .replace(/[\[|\]]/g, ""));
      console.log(_flatten4(arr));
    </script>
  </body>
</html>
